package cl.zeke.cursos.jsf2spring3jpa2.vista.managedbeans;

import cl.zeke.cursos.jsf2spring3jpa2.negocio.services.CalculadoraService;
import cl.zeke.cursos.jsf2spring3jpa2.util.ConstantesUtil;
import cl.zeke.java.commons.jsf2.Jsf2Util;
import java.io.Serializable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

@Component
@Scope("view")
public class CalculadoraBean implements Serializable {
    
    @Autowired
    private CalculadoraService calculadoraService;
    
    public void setCalculadoraService(CalculadoraService 
            calculadoraService) {
        this.calculadoraService = calculadoraService;
    }
    
    private static Logger log = LoggerFactory.getLogger(CalculadoraBean.class);
    
    private double numeroMemoria = 0;
    private double numero = 0;
    
    public void sumar() {
        numeroMemoria = calculadoraService.sumar(numeroMemoria,numero);
    }
    public String restar() {
        numeroMemoria = calculadoraService.restar(numeroMemoria,numero);
        return null;
    }
    public void dividir() {
        try {
            numeroMemoria = calculadoraService.dividir(numeroMemoria, numero);
        }catch(ArithmeticException ex) {
            Jsf2Util.addErrorMessage(ex.getMessage());
        }catch(Exception ex) {
            log.error("error", ex);
            Jsf2Util.addErrorMessage(ConstantesUtil.MSJ_ERROR_INTERNO);
        }
    }
    public void multiplicar() {
        numeroMemoria = calculadoraService.multiplicar(numeroMemoria, numero);
    }

    /*getters and setters*/
    
    public double getNumeroMemoria() {
        return numeroMemoria;
    }
    public void setNumeroMemoria(double numeroMemoria) {
        this.numeroMemoria = numeroMemoria;
    }
    public double getNumero() {
        return numero;
    }
    public void setNumero(double numero) {
        this.numero = numero;
    }
}
